【机器学习】线性回归实战案例三:股票数据价格区间预测模型(国外+国内数据) |
您所在的位置:网站首页 › 线性回归 python论文 › 【机器学习】线性回归实战案例三:股票数据价格区间预测模型(国外+国内数据) |
股票数据价格区间预测模型(国外+国内数据)
案例三:股票数据价格区间预测模型(国外+国内数据)2.3.1 模块加载与忽略警告设置2.3.2 加载数据和数据筛选2.3.3 探索式数据分析(EDA)2.3.4 探究字段之间的关联性2.3.5 特征工程2.3.6 模型创建与应用2.3.7 模型对比2.3.8 预测结果可视化2.3.9 国内茅台股票数据集应用
手动反爬虫,禁止转载:
原博地址 https://blog.csdn.net/lys_828/article/details/121452962(CSDN博主:Be_melting)
知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息
案例三:股票数据价格区间预测模型(国外+国内数据)
2.3.1 模块加载与忽略警告设置
打开Jupyter notebook,然后新建一个python3文件,命名为股票时序数据回归预测模型1.ipynb。文件首个cell中导入数据分析常用模块和模型相关的模块,设置提示警告的过滤,代码如下。 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression import math import seaborn as sns import datetime import matplotlib.pyplot as plt from matplotlib import style import time import warnings warnings.filterwarnings('ignore') 2.3.2 加载数据和数据筛选准备的数据集为谷歌2004年的股票数据,读取过程中将Date字段进行时间字段转化,并设置为索引,然后查看数据的维度。 df=pd.read_csv('./data/google-stockdata.csv',index_col='Date', parse_dates=True) df输出结果如下。(直接输出读取后文件数据对应的变量,最后面一行会有提示数据的维度,一共有3424行,12列,相当于最后输出了df.shape) 了解一下股票数据的基本信息,一般就是包含了前六个字段(包含索引),即股票的开盘时间、开盘价、最高点、最低点、收盘价和成交量。最后面的五个字段是经过复权后的衍生字段,而中间的两个字段是在案例中没有使用到。 2.3.3 探索式数据分析(EDA)之前的两个案例中均展示了探索式数据分析的几个步骤,这里就不再进行赘述。但是对于字段中的缺失值的查看一定是要做的,如果存在着缺失值就要进行缺失值处理,确保传入模型的数据是一个完整的数据,输出结果如下。 考虑数据量进行时间范围的确定。数据量一共3424行,假定按照数据量除以100取上限进行预测天数的确定,然后就可以构造对应标签数值。为了便于理解这个构建标签数值的过程,可以进行一个简单的示例,先以5天为基准构建数据。为了不破坏数据和方便查看,对原数据进行备份后取出10条数据进行演示。 输出结果如下。(采用 shift 加上负值的方法 可以把同一组数据错位的放在一起,这个错位是把5天后的数据与当前天的数据放在同一行中,然后两个字段数值相减就可以获得对应天数股票价格的差值) 利用上面的原理,应用到整个股票数据集中, forecast_col = 'Adj. Close' forecast_out = int(math.ceil(0.01 * len(df))) df['label'] = df[forecast_col].shift(-forecast_out) df[-40:-30]输出结果如下。(为了核实是否处理正确,切片获取倒数第40到第30行的数据,输出结果中label字段数据有一半缺失一般完整,说明操作过程正确) 完成了标签字段数据的构建,接下来就可以查看特征字段与标签字段的关联性,直接利用热力图进行展示输出。 确定标签字段后,在热力图中只需要查看标签字段label对应的行或者列即可,比如上图红框标注的列。根据图中的结果,首先看两个不相关的字段,也就是中间的那两个字段在整个案例中没有进行介绍也和标签字段无关,后续直接进行剔除;然后就是股票除时间外的剩下的5个信息与调整后的5个信息,由于标签字段就是利用调整后的收盘价字段构造的,所以会和调整后的收盘价相相关性为0.99,然而调整后的4个信息之间的相关性都为1,自然标签字段和剩下的3个信息直接的相关性也是0.99,至于未调整前的数据,是经过一定的计算转化而来,相关性数值相对较小一些,但是也是存在很强的相关性。 2.3.5 特征工程根据关联性分析的结果重新提取字段数据,构建数据集,创建两个新字段为高低价变化差和涨跌幅,并进行缺失值的处理。 df = df[['Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume','label']] df['HL_PCT'] = (df['Adj. High'] - df['Adj. Low']) / df['Adj. Close'] * 100.0 df['PCT_change'] = (df['Adj. Close'] - df['Adj. Open']) / df['Adj. Open'] * 100.0 df.dropna(inplace=True) df.isnull().sum()输出结果如下。(在进行创建模型之前,数据中的缺失值需要清洗干净,此外添加的两个字段也在数据集中) (1)划分特征数据X和标签数据Y 然后才是进行训练集和测试集的划分,按照9:1的比例进行。 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)(3)模型创建与拟合。 clf=LinearRegression() clf.fit(X_train,y_train)(4)模型预测与评估。 forecast_set = clf.predict(X_lately) forecast_set输出结果如下。(最终的股票价钱是在1082-1262之间) 在进行数据集构建时,细心点可以发现特征字段的量纲不一致,比如价钱字段和成交量字段数值。接下来就是确定特征数据标准化会不会对模型有一定的优化,需要添加一个标量处理器,之后的模型步骤保持一致,建模部分全部代码和最终测试得分如下。 #划分特征数据和标签数据 X = np.array(df.drop(['label'], 1)) y = np.array(df['label']) #特征数据标量化 from sklearn import preprocessing X = preprocessing.scale(X) #进行最后35行数据剔除 X_lately = X[-forecast_out:] X = X[:-forecast_out] y = y[:-forecast_out] #划分训练数据与测试数据 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1) #创建线性回归模型 clf=LinearRegression() #模型拟合 clf.fit(X_train,y_train) #模型预测结果及输出股票价格区间 forecast_set = clf.predict(X_lately) min(forecast_set),max(forecast_set) #模型得分 confidence = clf.score(X_test, y_test) confidence最终输出的模型预测的股票价格区间(1080-1217之间)与模型得分结果(正确率为97.7%)如下。由于没有指定随机种子,每次程序跑出的结果基本上都不会完全一致。 由于标签的结果带有时序性且是数值型,就可以对预测的结果进行可视化展示。由于删除了倒数35行的数据,因此要得到绘制35天后的数据,就需要先获得最后35行对应的时间,代码如下。 df['Forecast'] = np.nan last_date = df.iloc[-1].name last_unix = last_date.timestamp() last_unix = time.mktime(last_date.timetuple()) one_day = 864006 next_unix = last_unix + one_day输出结果如下。(之前进行数据集处理的时候将最后35条数据删除,现在输出结果汇总把添加了Forecast字段) 输出结果如下。(需要留意,模型数据中最后日期是2018年2月5号,预测的结果对应label值,这个数据就是35天后的股票价格,映射到对应的时间段就如下) 在使用国外谷歌的数据进行线性回归回归模型的预测中,模型得分正确率达到了97%,而对于国内股票的预测效果如何,接下来进行探究。创建一个新的python3文件,命名为股票时序数据回归预测模型2.ipynb,数据集为茅台酒的股票数据(对应的编号为600519)。首先导入模块和加载数据,代码如下。 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression import math import seaborn as sns import matplotlib.pyplot as plt df2 = pd.read_csv('./data/600519d4.csv',index_col='trade_date', parse_dates=True)输出结果如下:(股票数据的时间跨度为2020年1月2日到2021年10月21日,可以通过tushare接口下载) 最后就是进行模型的创建,训练,预测和评估,代码及输出结果如下。 对于金融类数据,可以尝试ta模块,各种指标已经封装在pandas中了,只需要进行pip install pandas_ta即可进行安装。 最终的输出股票价格区间和对应的模型得分,以及预测股票价格的涨跌幅结果如下。数据经过平滑处理过后,模型预测的准确度要大大提升,最后的涨跌幅度的范围拿捏着也很准确。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |